Código
# instalar/cargar paquetes
sketchy::load_packages(
c("ggplot2",
"viridis",
"nnet",
"caret",
"glmnet")
)Loading required package: nnet
15 de octubre de 2024
Paquetes a utilizar en este manual:
Loading required package: nnet
En este tutorial exploraremos los métodos y métricas utilizadas para evaluar el desempeño de los modelos de regresión. Evaluar correctamente los modelos permite entender qué tan bien el modelo se ajusta a los datos y si sus predicciones son útiles para datos no vistos.
En modelos de regresión (i.e. cuando la variable respuesta Y es continua) el propósito de la evaluación consiste en medir qué tan cerca están las predicciones del modelo (y^) con respecto a los valores reales observados (y). En modelos de regresión, esto implica cuantificar el error entre los valores predichos y los valores verdaderos.
Es la raíz cuadrada del error cuadrático medio (MSE) y tiene la misma unidad que la variable de respuesta.
# Generar datos simulados
set.seed(42)
x <- rnorm(100)
y <- 3 * x + rnorm(100, sd = 0.5)
# Crear un marco de datos
datos <- data.frame(x = x, y = y)
# correr modelo
mod <- lm(y ~ x, data = datos)
# Step 2: Obtener predicciones
predic <- predict(mod)
# Step 3: Calcular RMSE
sqrt(mean((datos$y - predic)^2))[1] 0.4496
Coeficiente de Determinación (R2R2) Indica qué proporción de la variabilidad en los datos de la variable dependiente es explicada por el modelo. R2=1−∑i=1n(yi−y^i)2∑i=1n(yi−yˉ)2 R2=1−∑i=1n(yi−yˉ)2∑i=1n(yi−y^i)2
Interpretación: R2R2 cercano a 1 indica un buen ajuste.
Ejemplo en R:
R
r2 <- 1 - sum((y_real - y_pred)^2) / sum((y_real - mean(y_real))^2)
print(r2)
Técnicas de Validación del Modelo
División de Conjuntos de Datos Se divide el dataset en dos partes: Entrenamiento: Se usa para ajustar el modelo. Prueba: Se usa para evaluar su desempeño en datos no vistos.
Ejemplo en R:
R
set.seed(123) train_indices <- sample(1:nrow(data), size = 0.7 * nrow(data)) train_data <- data[train_indices, ] test_data <- data[-train_indices, ]
Validación Cruzada K-Fold El dataset se divide en K partes. El modelo se entrena K−1K−1 veces y se prueba en la parte restante. Se repite el proceso para cada una de las divisiones, y al final se calcula la métrica promedio.
Ejemplo en R con caret:
library(caret)
# Generar datos simulados
set.seed(42)
x1 <- rnorm(100)
x2 <- rnorm(100)
y <- 3 * x1 + rnorm(100, sd = 0.5)
# Crear un marco de datos
datos <- data.frame(x1 = x1 , x2 = x2, y = y)
train_control <- trainControl(method = "cv", number = 10)
model <- train(y ~ x1 + x2, data = datos, method = "lm", trControl = train_control)
print(model)Linear Regression
100 samples
2 predictor
No pre-processing
Resampling: Cross-Validated (10 fold)
Summary of sample sizes: 91, 91, 91, 88, 90, 91, ...
Resampling results:
RMSE Rsquared MAE
0.50409 0.97361 0.41225
Tuning parameter 'intercept' was held constant at a value of TRUE
Leave-One-Out Cross-Validation (LOOCV) Es un caso especial de validación cruzada donde el número de folds es igual al número de observaciones. Se usa para datasets pequeños.
Ejemplo en R:
Linear Regression
100 samples
2 predictor
No pre-processing
Resampling: Leave-One-Out Cross-Validation
Summary of sample sizes: 99, 99, 99, 99, 99, 99, ...
Resampling results:
RMSE Rsquared MAE
0.51531 0.97194 0.41515
Tuning parameter 'intercept' was held constant at a value of TRUE
Consideraciones Importantes al Evaluar Modelos de Regresión
Sobreajuste vs Subajuste: Un modelo muy complejo puede ajustarse demasiado a los datos de entrenamiento (sobreajuste), mientras que un modelo muy simple puede no capturar bien las relaciones importantes (subajuste). Regularización: Aplicar técnicas como Ridge o Lasso para reducir la complejidad del modelo y mejorar la generalización. Outliers: Valores atípicos pueden afectar negativamente las métricas como el MSE o RMSE. Distribución de los Errores: Se espera que los residuos sean independientes, con media cero y varianza constante.
Ejemplo Completo en R: Evaluación de un Modelo de Regresión Lineal
# Simulación de datos
set.seed(123)
x <- rnorm(100)
y <- 3 * x + rnorm(100)
# Ajustar modelo de regresión lineal
modelo <- lm(y ~ x)
# Predicciones
y_pred <- predict(modelo)
# Cálculo de métricas
mae <- mean(abs(y - y_pred))
mse <- mean((y - y_pred)^2)
rmse <- sqrt(mse)
r2 <- 1 - sum((y - y_pred)^2) / sum((y - mean(y))^2)
# Imprimir resultados
cat("MAE:", mae, "\n")MAE: 0.75723
MSE: 0.92344
RMSE: 0.96096
R^2: 0.88586
Interpretación:
El MAE indica el error promedio absoluto en las predicciones.
El MSE y RMSE penalizan más los errores grandes.
El R2R2 muestra qué proporción de la variabilidad en yy es explicada por xx.
Evaluar el desempeño de los modelos de regresión es crucial para determinar su capacidad de hacer predicciones útiles. Utilizar métricas adecuadas, como MAE, MSE, RMSE y R2R2, junto con técnicas de validación cruzada, garantiza que los modelos no solo se ajusten bien a los datos de entrenamiento, sino que también generalicen bien en datos nuevos.
Cada métrica de evaluación en modelos de regresión tiene sus ventajas y desventajas, y su idoneidad depende del contexto del problema, la naturaleza de los datos y los objetivos del análisis. A continuación, se describen los contextos en los que cada métrica es mejor o peor: 1. Error Absoluto Medio (MAE)
Ventajas:
Es fácil de interpretar, ya que mide el error promedio en las mismas unidades que la variable de respuesta.
Es robusto ante outliers, ya que trata cada error de manera lineal (sin cuadrar los errores).
Desventajas:
No penaliza más los errores grandes, por lo que puede no ser adecuado si los errores grandes son especialmente problemáticos en el contexto.
Contexto en que es mejor:
Es útil cuando se prefiere una medida que trate todos los errores por igual, como en situaciones en las que los errores pequeños y grandes son igualmente importantes.
Es apropiado para datos con ruido que no contienen outliers significativos.
Contexto en que es peor:
No es adecuado en aplicaciones donde los errores grandes deben ser penalizados más fuertemente, como en predicciones financieras o en problemas de ingeniería con altos costos asociados a grandes errores.
Error Cuadrático Medio (MSE)
Ventajas: Penaliza más los errores grandes, ya que los errores se elevan al cuadrado. Esto lo hace útil para detectar errores grandes que podrían ser problemáticos. Es diferenciable, lo cual lo convierte en una métrica favorable para la optimización en algoritmos de aprendizaje automático. Desventajas: Es sensible a outliers, ya que los errores grandes tienen un impacto más significativo en el resultado. La interpretación es menos intuitiva porque está en las unidades cuadradas de la variable de respuesta. Contexto en que es mejor: En aplicaciones donde los errores grandes son mucho más costosos o críticos que los pequeños, como la predicción de precios de bienes de lujo o en control de calidad. Es adecuado para tareas de optimización en algoritmos que minimizan el MSE. Contexto en que es peor: No es ideal cuando existen muchos outliers en los datos, ya que puede hacer que el modelo sea muy sensible a estos valores atípicos. Si el objetivo es una interpretación sencilla de los errores en las mismas unidades de la variable de respuesta.
Raíz del Error Cuadrático Medio (RMSE)
Ventajas: Tiene las mismas unidades que la variable de respuesta, lo que facilita la interpretación. Penaliza más los errores grandes, similar al MSE. Desventajas: Como el MSE, es sensible a outliers, lo que puede distorsionar la métrica en presencia de valores atípicos. Contexto en que es mejor: Es útil cuando se necesita una métrica con las mismas unidades que la variable de respuesta, pero que también penalice errores grandes. En situaciones donde los errores grandes son particularmente perjudiciales y deben ser evitados. Contexto en que es peor: No es adecuado para datos con outliers extremos, ya que puede llevar a conclusiones erróneas sobre el desempeño del modelo. No es ideal cuando todos los errores deben ser tratados por igual, independientemente de su magnitud.
Coeficiente de Determinación (R2R2)
Ventajas: Proporciona una medida de la proporción de la variabilidad explicada por el modelo, lo cual es útil para evaluar la calidad general del ajuste. Es fácil de interpretar como un porcentaje de variabilidad explicada. Desventajas: No es una buena métrica para modelos no lineales, ya que puede no reflejar bien la calidad del ajuste en estos casos. Puede ser engañoso si los datos contienen outliers o si la varianza de la variable de respuesta es baja. Contexto en que es mejor: En modelos de regresión lineal donde se busca evaluar qué tan bien el modelo explica la variabilidad en los datos. Cuando se desea una métrica estandarizada para comparar la calidad del ajuste entre diferentes modelos. Contexto en que es peor: Para modelos no lineales, el R2R2 no siempre refleja la calidad real del ajuste. En problemas con una variable de respuesta que tiene poca variabilidad, un alto R2R2 puede no ser muy informativo.
La lógica detrás de cualquier método de entrenamiento de modelos estadísticos se centra en ajustar un modelo a un conjunto de datos con el fin de capturar la relación entre las variables predictoras y la variable de respuesta. El objetivo principal es aprender patrones subyacentes en los datos para hacer predicciones precisas o interpretar la relación entre las variables.
flowchart LR
A(Definir el Modelo) --> B("Especificar la\nFunción de Pérdida")
B --> C("Optimización\ndel Modelo")
C --> D("Regularización")
D --> E("Evaluación\ndel Modelo")
E --> F("¿Es el rendimiento\nsatisfactorio?")
F -->|"Sí"| G(Modelo\nFinal)
F -->|No| H("Realizar Ajustes\ne Iteración")
H --> A
Definir el Modelo: Seleccionar el tipo de modelo estadístico (regresión lineal, regresión logística, árboles de decisión, etc.) que se ajusta a la naturaleza del problema y a la estructura de los datos. El modelo define la forma de la función que relaciona las variables predictoras X con la variable de respuesta Y.
Especificar una Función de Pérdida (o Costo): La función de pérdida mide la diferencia entre las predicciones del modelo y los valores reales de la variable de respuesta. En los modelos de regresión, un ejemplo común es el error cuadrático medio (MSE), mientras que en clasificación, la entropía cruzada o el logaritmo de la verosimilitud son más adecuados.
Optimización del Modelo: El entrenamiento implica minimizar (o maximizar, dependiendo del enfoque) la función de pérdida ajustando los parámetros del modelo. Por ejemplo, en regresión lineal, se busca encontrar los coeficientes que minimicen la suma de los errores cuadráticos entre las predicciones y los valores observados. Métodos comunes para optimización incluyen el descenso de gradiente, la maximización de la verosimilitud y algoritmos especializados como el algoritmo EM.
Regularización (en caso necesario): La regularización añade un término de penalización a la función de pérdida para evitar el sobreajuste. Ayuda a mantener el modelo más simple, controlando la magnitud de los coeficientes o reduciendo el número de variables seleccionadas.
Evaluación del Modelo: Una vez entrenado, el modelo se evalúa utilizando datos de prueba o técnicas de validación cruzada para estimar su rendimiento en datos no vistos. Las métricas de evaluación, como la precisión, el error absoluto medio o el índice F1, ayudan a determinar si el modelo generaliza bien.
**Ajustes e Iteración: Basado en la evaluación del modelo, puede ser necesario ajustar hiperparámetros, cambiar la arquitectura del modelo o realizar preprocesamiento adicional en los datos. Se itera sobre el proceso hasta que se logre un rendimiento satisfactorio.
Generalización: La capacidad del modelo para realizar predicciones precisas en nuevos datos.
Equilibrio entre sobreajuste y subajuste: El modelo debe ser lo suficientemente complejo para capturar patrones relevantes, pero no tan complejo que capture ruido específico del conjunto de entrenamiento.
Interpretabilidad vs. Complejidad: Modelos más complejos pueden proporcionar mejores predicciones, pero suelen ser más difíciles de interpretar.
En resumen, el entrenamiento de modelos estadísticos consiste en ajustar un modelo para que describa con precisión los datos observados y sea capaz de hacer predicciones precisas en nuevos datos, equilibrando la complejidad del modelo y su capacidad de generalización.
La validación cruzada se utiliza para evaluar el rendimiento de un modelo de regresión lineal, ayudando a identificar el nivel de ajuste adecuado y a prevenir el sobreajuste. Las técnicas de validación cruzada más comunes son:
k-Fold Cross-Validation: Se divide el conjunto de datos en k subconjuntos (folds). En cada iteración, se entrena el modelo con k-1 subconjuntos y se prueba en el subconjunto restante. El proceso se repite k veces, promediando el error para obtener una estimación del error de generalización.
Leave-One-Out Cross-Validation (LOOCV): Cada observación se usa como conjunto de prueba, y las restantes n-1 observaciones se utilizan para entrenar el modelo. Es útil en conjuntos de datos pequeños, pero puede ser costoso computacionalmente para grandes volúmenes de datos.
Ejemplo en R:
# Generar datos simulados
set.seed(42)
x <- rnorm(100)
y <- 3 * x + rnorm(100, sd = 0.5)
# Crear un marco de datos
datos <- data.frame(x = x, y = y)
# Configuración de validación cruzada 10-fold
control <- trainControl(method = "cv", number = 10)
# Entrenamiento del modelo con validación cruzada
modelo_cv <- train(y ~ x, data = datos, method = "lm", trControl = control)
print(modelo_cv)Linear Regression
100 samples
1 predictor
No pre-processing
Resampling: Cross-Validated (10 fold)
Summary of sample sizes: 89, 91, 91, 90, 90, 91, ...
Resampling results:
RMSE Rsquared MAE
0.45531 0.98181 0.36177
Tuning parameter 'intercept' was held constant at a value of TRUE
El remuestreo permite evaluar la variabilidad del modelo al entrenarlo varias veces con diferentes subconjuntos del conjunto de datos original. Estas técnicas son útiles cuando el conjunto de datos es pequeño o cuando se desea evaluar la robustez del modelo.
Bootstrap: Es una técnica de remuestreo con reemplazo. Se crean múltiples subconjuntos de datos a partir del original y se entrena el modelo en cada uno de ellos. Permite estimar la incertidumbre de los coeficientes del modelo.
Ejemplo en R con Bootstrap:
Linear Regression
100 samples
1 predictor
No pre-processing
Resampling: Bootstrapped (100 reps)
Summary of sample sizes: 100, 100, 100, 100, 100, 100, ...
Resampling results:
RMSE Rsquared MAE
0.46044 0.98041 0.36018
Tuning parameter 'intercept' was held constant at a value of TRUE
En regresión lineal, se utilizan medidas de error como el error cuadrático medio (MSE) o el error absoluto medio (MAE) para evaluar el rendimiento del modelo durante la validación cruzada. La validación cruzada permite identificar si el modelo es demasiado complejo (sobreajuste) o demasiado simple (subajuste). Ejemplo en R calculando el MSE:
Validación cruzada es una técnica que permite evaluar el rendimiento de un modelo al dividir los datos en varios subconjuntos (folds), entrenando el modelo en algunos y evaluándolo en otros:
Ejemplo en R:
# Cargar librería caret para validación cruzada
library(caret)
# Generar datos simulados
set.seed(123)
x <- matrix(rnorm(100 * 20), 100, 20)
y <- factor(sample(c("A", "B"), 100, replace = TRUE))
datos_log <- data.frame(x, y)
# Configuración de validación cruzada 10-fold
control <- trainControl(method = "cv", number = 10)
# Entrenamiento del modelo con validación cruzada
modelo_cv <- train(y ~ ., data = datos_log, method = "glm", family = binomial, trControl = control)
print(modelo_cv)Generalized Linear Model
100 samples
20 predictor
2 classes: 'A', 'B'
No pre-processing
Resampling: Cross-Validated (10 fold)
Summary of sample sizes: 90, 89, 90, 91, 89, 91, ...
Resampling results:
Accuracy Kappa
0.49788 -0.023208
Call:
NULL
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.3659 0.2583 -1.42 0.157
X1 0.0870 0.2775 0.31 0.754
X2 0.0593 0.2685 0.22 0.825
X3 0.4065 0.2678 1.52 0.129
X4 0.2473 0.2622 0.94 0.346
X5 0.5893 0.2800 2.10 0.035 *
X6 -0.0255 0.2823 -0.09 0.928
X7 -0.0750 0.2479 -0.30 0.762
X8 0.3205 0.2569 1.25 0.212
X9 0.6021 0.2553 2.36 0.018 *
X10 -0.0139 0.2571 -0.05 0.957
X11 -0.5509 0.2862 -1.92 0.054 .
X12 -0.2202 0.2696 -0.82 0.414
X13 -0.1534 0.2836 -0.54 0.589
X14 0.4374 0.2896 1.51 0.131
X15 0.5737 0.2736 2.10 0.036 *
X16 -0.5108 0.3243 -1.58 0.115
X17 0.3061 0.2612 1.17 0.241
X18 -0.3773 0.2526 -1.49 0.135
X19 -0.3331 0.2487 -1.34 0.180
X20 0.1238 0.2383 0.52 0.603
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 137.63 on 99 degrees of freedom
Residual deviance: 111.93 on 79 degrees of freedom
AIC: 153.9
Number of Fisher Scoring iterations: 4
La validación cruzada es utilizada para obtener una estimación del error del modelo. A través de la técnica de validación cruzada se busca identificar la configuración de hiperparámetros que minimiza el error en el conjunto de prueba. Ejemplo en R:
# Configuración para validación cruzada con ajuste de hiperparámetros
control_tune <- trainControl(method = "repeatedcv", number = 10, repeats = 3)
# Entrenamiento con diferentes hiperparámetros para el modelo de regresión logística
grid <- expand.grid(lambda = seq(0, 1, by = 0.1), alpha = seq(0, 1, by = 0.1))
modelo_tune <- train(y ~ ., data = datos_log, method = "glmnet", trControl = control_tune, tuneGrid = grid)
print(modelo_tune)glmnet
100 samples
20 predictor
2 classes: 'A', 'B'
No pre-processing
Resampling: Cross-Validated (10 fold, repeated 3 times)
Summary of sample sizes: 90, 90, 90, 91, 89, 90, ...
Resampling results across tuning parameters:
alpha lambda Accuracy Kappa
0.0 0.0 0.52886 0.0343446
0.0 0.1 0.52620 0.0176571
0.0 0.2 0.54997 0.0550225
0.0 0.3 0.53293 0.0159150
0.0 0.4 0.53620 0.0155997
0.0 0.5 0.55929 0.0594068
0.0 0.6 0.56263 0.0624496
0.0 0.7 0.56232 0.0580332
0.0 0.8 0.55559 0.0392748
0.0 0.9 0.55559 0.0362088
0.0 1.0 0.55862 0.0395610
0.1 0.0 0.52552 0.0320867
0.1 0.1 0.54293 0.0467734
0.1 0.2 0.56899 0.0876765
0.1 0.3 0.55923 0.0517916
0.1 0.4 0.57838 0.0769984
0.1 0.5 0.57468 0.0656129
0.1 0.6 0.55061 0.0026598
0.1 0.7 0.55024 0.0000000
0.1 0.8 0.55024 0.0000000
0.1 0.9 0.55024 0.0000000
0.1 1.0 0.55024 0.0000000
0.2 0.0 0.52552 0.0320867
0.2 0.1 0.53855 0.0366067
0.2 0.2 0.57808 0.0901100
0.2 0.3 0.56801 0.0495956
0.2 0.4 0.55024 0.0000000
0.2 0.5 0.55024 0.0000000
0.2 0.6 0.55024 0.0000000
0.2 0.7 0.55024 0.0000000
0.2 0.8 0.55024 0.0000000
0.2 0.9 0.55024 0.0000000
0.2 1.0 0.55024 0.0000000
0.3 0.0 0.52552 0.0320867
0.3 0.1 0.56172 0.0751321
0.3 0.2 0.56936 0.0584093
0.3 0.3 0.55024 0.0000000
0.3 0.4 0.55024 0.0000000
0.3 0.5 0.55024 0.0000000
0.3 0.6 0.55024 0.0000000
0.3 0.7 0.55024 0.0000000
0.3 0.8 0.55024 0.0000000
0.3 0.9 0.55024 0.0000000
0.3 1.0 0.55024 0.0000000
0.4 0.0 0.52923 0.0393742
0.4 0.1 0.55522 0.0571448
0.4 0.2 0.54758 -0.0032926
0.4 0.3 0.55024 0.0000000
0.4 0.4 0.55024 0.0000000
0.4 0.5 0.55024 0.0000000
0.4 0.6 0.55024 0.0000000
0.4 0.7 0.55024 0.0000000
0.4 0.8 0.55024 0.0000000
0.4 0.9 0.55024 0.0000000
0.4 1.0 0.55024 0.0000000
0.5 0.0 0.52923 0.0393742
0.5 0.1 0.57209 0.0787931
0.5 0.2 0.55024 0.0000000
0.5 0.3 0.55024 0.0000000
0.5 0.4 0.55024 0.0000000
0.5 0.5 0.55024 0.0000000
0.5 0.6 0.55024 0.0000000
0.5 0.7 0.55024 0.0000000
0.5 0.8 0.55024 0.0000000
0.5 0.9 0.55024 0.0000000
0.5 1.0 0.55024 0.0000000
0.6 0.0 0.52923 0.0393742
0.6 0.1 0.56542 0.0563986
0.6 0.2 0.55024 0.0000000
0.6 0.3 0.55024 0.0000000
0.6 0.4 0.55024 0.0000000
0.6 0.5 0.55024 0.0000000
0.6 0.6 0.55024 0.0000000
0.6 0.7 0.55024 0.0000000
0.6 0.8 0.55024 0.0000000
0.6 0.9 0.55024 0.0000000
0.6 1.0 0.55024 0.0000000
0.7 0.0 0.52923 0.0393742
0.7 0.1 0.55626 0.0262045
0.7 0.2 0.55024 0.0000000
0.7 0.3 0.55024 0.0000000
0.7 0.4 0.55024 0.0000000
0.7 0.5 0.55024 0.0000000
0.7 0.6 0.55024 0.0000000
0.7 0.7 0.55024 0.0000000
0.7 0.8 0.55024 0.0000000
0.7 0.9 0.55024 0.0000000
0.7 1.0 0.55024 0.0000000
0.8 0.0 0.52923 0.0393742
0.8 0.1 0.54158 -0.0127255
0.8 0.2 0.55024 0.0000000
0.8 0.3 0.55024 0.0000000
0.8 0.4 0.55024 0.0000000
0.8 0.5 0.55024 0.0000000
0.8 0.6 0.55024 0.0000000
0.8 0.7 0.55024 0.0000000
0.8 0.8 0.55024 0.0000000
0.8 0.9 0.55024 0.0000000
0.8 1.0 0.55024 0.0000000
0.9 0.0 0.52923 0.0393742
0.9 0.1 0.54084 -0.0180451
0.9 0.2 0.55024 0.0000000
0.9 0.3 0.55024 0.0000000
0.9 0.4 0.55024 0.0000000
0.9 0.5 0.55024 0.0000000
0.9 0.6 0.55024 0.0000000
0.9 0.7 0.55024 0.0000000
0.9 0.8 0.55024 0.0000000
0.9 0.9 0.55024 0.0000000
0.9 1.0 0.55024 0.0000000
1.0 0.0 0.52923 0.0393742
1.0 0.1 0.54721 -0.0059524
1.0 0.2 0.55024 0.0000000
1.0 0.3 0.55024 0.0000000
1.0 0.4 0.55024 0.0000000
1.0 0.5 0.55024 0.0000000
1.0 0.6 0.55024 0.0000000
1.0 0.7 0.55024 0.0000000
1.0 0.8 0.55024 0.0000000
1.0 0.9 0.55024 0.0000000
1.0 1.0 0.55024 0.0000000
Accuracy was used to select the optimal model using the largest value.
The final values used for the model were alpha = 0.1 and lambda = 0.4.
Las siguientes son medidas comunes para evaluar el rendimiento de un modelo:
Matriz de Confusión: Resume el rendimiento del modelo en términos de verdaderos positivos, falsos positivos, verdaderos negativos y falsos negativos.
Precisión: Proporción de predicciones correctas sobre el total de predicciones. Precisión=TPTP+FP Precisión=TP+FPTP
\[ \text{Odds} = \frac{\text{Probabilidad de éxito}}{\text{Probabilidad de fracaso}} = \frac{P(E)}{1 - P(E)} \]
Recall (Sensibilidad): Proporción de verdaderos positivos sobre el total de casos positivos. Recall=TPTP+FN Recall=TP+FNTP
Índice F1: Es la media armónica de la precisión y el recall. F1=2×Precisioˊn×RecallPrecisioˊn+Recall F1=2×Precisioˊn+RecallPrecisioˊn×Recall
Ejemplo en R:
Confusion Matrix and Statistics
Reference
Prediction A B
A 44 17
B 11 28
Accuracy : 0.72
95% CI : (0.621, 0.805)
No Information Rate : 0.55
P-Value [Acc > NIR] : 0.00036
Kappa : 0.427
Mcnemar's Test P-Value : 0.34470
Sensitivity : 0.800
Specificity : 0.622
Pos Pred Value : 0.721
Neg Pred Value : 0.718
Prevalence : 0.550
Detection Rate : 0.440
Detection Prevalence : 0.610
Balanced Accuracy : 0.711
'Positive' Class : A
Precisión: 0.72131
Recall: 0.8
Índice F1: 0.75862
Para evaluar correctamente un modelo, se suele dividir el conjunto de datos en:
Conjunto de entrenamiento: Usado para entrenar el modelo. Conjunto de validación: Utilizado para la selección de hiperparámetros. Conjunto de prueba: Usado para evaluar el rendimiento final.
Ejemplo en R:
# División de los datos en conjunto de entrenamiento y prueba
set.seed(123)
trainIndex <- createDataPartition(datos_log$y, p = 0.8)[[1]]
x_train <- datos_log[trainIndex, ]
y_train <- datos_log$y[trainIndex]
x_test <- datos_log[-trainIndex, ]
y_test <- datos_log$y[-trainIndex]
# Entrenar un modelo en los datos de entrenamiento
modelo_final <- train(x_train, y_train, method = "glm", family = binomial)
# Evaluar en el conjunto de prueba
pred_test <- predict(modelo_final, x_test)
confusion_test <- confusionMatrix(pred_test, y_test)
print(confusion_test)Confusion Matrix and Statistics
Reference
Prediction A B
A 11 0
B 0 9
Accuracy : 1
95% CI : (0.832, 1)
No Information Rate : 0.55
P-Value [Acc > NIR] : 6.42e-06
Kappa : 1
Mcnemar's Test P-Value : NA
Sensitivity : 1.00
Specificity : 1.00
Pos Pred Value : 1.00
Neg Pred Value : 1.00
Prevalence : 0.55
Detection Rate : 0.55
Detection Prevalence : 0.55
Balanced Accuracy : 1.00
'Positive' Class : A
Esta clase abarca los conceptos de validación cruzada y técnicas de remuestreo, el uso de la validación cruzada para evaluar modelos, las medidas de evaluación (matriz de confusión, precisión, recall, índice F1) y la división de conjuntos de datos. Los ejemplos en R proporcionan un enfoque práctico para cada concepto, ayudando a comprender la importancia de una evaluación adecuada en el aprendizaje estadístico.
R version 4.4.1 (2024-06-14)
Platform: x86_64-pc-linux-gnu
Running under: Ubuntu 22.04.4 LTS
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.10.0
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=es_CR.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=es_CR.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=es_CR.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=es_CR.UTF-8 LC_IDENTIFICATION=C
time zone: America/Costa_Rica
tzcode source: system (glibc)
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] nnet_7.3-19 caret_6.0-94 lattice_0.22-6 glmnet_4.1-8
[5] Matrix_1.7-0 viridis_0.6.5 viridisLite_0.4.2 ggplot2_3.5.1
[9] knitr_1.48
loaded via a namespace (and not attached):
[1] gtable_0.3.5 shape_1.4.6.1 xfun_0.48
[4] remotes_2.5.0 htmlwidgets_1.6.4 recipes_1.0.10
[7] vctrs_0.6.5 tools_4.4.1 generics_0.1.3
[10] stats4_4.4.1 parallel_4.4.1 proxy_0.4-27
[13] tibble_3.2.1 fansi_1.0.6 ModelMetrics_1.2.2.2
[16] pkgconfig_2.0.3 data.table_1.15.4 lifecycle_1.0.4
[19] stringr_1.5.1 compiler_4.4.1 munsell_0.5.1
[22] codetools_0.2-20 sketchy_1.0.3 htmltools_0.5.8.1
[25] class_7.3-22 yaml_2.3.10 prodlim_2024.06.25
[28] crayon_1.5.3 pillar_1.9.0 MASS_7.3-61
[31] gower_1.0.1 iterators_1.0.14 rpart_4.1.23
[34] foreach_1.5.2 nlme_3.1-165 parallelly_1.38.0
[37] lava_1.8.0 packrat_0.9.2 tidyselect_1.2.1
[40] digest_0.6.37 stringi_1.8.4 future_1.34.0
[43] dplyr_1.1.4 reshape2_1.4.4 purrr_1.0.2
[46] listenv_0.9.1 splines_4.4.1 fastmap_1.2.0
[49] grid_4.4.1 colorspace_2.1-1 cli_3.6.3
[52] magrittr_2.0.3 survival_3.7-0 utf8_1.2.4
[55] e1071_1.7-16 future.apply_1.11.2 withr_3.0.1
[58] scales_1.3.0 lubridate_1.9.3 timechange_0.3.0
[61] rmarkdown_2.28 globals_0.16.3 timeDate_4032.109
[64] gridExtra_2.3 evaluate_1.0.1 hardhat_1.4.0
[67] rlang_1.1.4 Rcpp_1.0.13 xaringanExtra_0.8.0
[70] glue_1.8.0 pROC_1.18.5 ipred_0.9-14
[73] rstudioapi_0.16.0 jsonlite_1.8.9 R6_2.5.1
[76] plyr_1.8.9
---
title: <font size="7"><b>Entrenamiento y evaluación de modelos</b></font>
editor_options:
chunk_output_type: console
---
```{r,echo=FALSE,message=FALSE}
options("digits"=5)
options("digits.secs"=3)
```
```{r, echo = FALSE, message=FALSE}
library(knitr)
library(ggplot2)
library(viridis)
library(glmnet)
library(caret)
theme_set(theme_classic(base_size = 20))
```
::: {.alert .alert-info}
# Objetivo del manual {.unnumbered .unlisted}
-
:::
Paquetes a utilizar en este manual:
```{r}
# instalar/cargar paquetes
sketchy::load_packages(
c("ggplot2",
"viridis",
"nnet",
"caret",
"glmnet")
)
```
# Evaluacion de modelos
En este tutorial exploraremos los métodos y métricas utilizadas para evaluar el desempeño de los modelos de regresión. Evaluar correctamente los modelos permite entender qué tan bien el modelo se ajusta a los datos y si sus predicciones son útiles para datos no vistos.
En modelos de regresión (i.e. cuando la variable respuesta Y es continua) el propósito de la evaluación consiste en medir qué tan cerca están las predicciones del modelo (y^) con respecto a los valores reales observados (y). En modelos de regresión, esto implica cuantificar el error entre los valores predichos y los valores verdaderos.
## Raíz del Error Cuadrático Medio (RMSE)
Es la raíz cuadrada del error cuadrático medio (MSE) y tiene la misma unidad que la variable de respuesta.
```{r}
# Generar datos simulados
set.seed(42)
x <- rnorm(100)
y <- 3 * x + rnorm(100, sd = 0.5)
# Crear un marco de datos
datos <- data.frame(x = x, y = y)
# correr modelo
mod <- lm(y ~ x, data = datos)
# Step 2: Obtener predicciones
predic <- predict(mod)
# Step 3: Calcular RMSE
sqrt(mean((datos$y - predic)^2))
```
Coeficiente de Determinación (R2R2)
Indica qué proporción de la variabilidad en los datos de la variable dependiente es explicada por el modelo.
R2=1−∑i=1n(yi−y^i)2∑i=1n(yi−yˉ)2
R2=1−∑i=1n(yi−yˉ)2∑i=1n(yi−y^i)2
Interpretación: R2R2 cercano a 1 indica un buen ajuste.
Ejemplo en R:
R
r2 <- 1 - sum((y_real - y_pred)^2) / sum((y_real - mean(y_real))^2)
print(r2)
3. Técnicas de Validación del Modelo
División de Conjuntos de Datos
Se divide el dataset en dos partes:
Entrenamiento: Se usa para ajustar el modelo.
Prueba: Se usa para evaluar su desempeño en datos no vistos.
Ejemplo en R:
R
set.seed(123)
train_indices <- sample(1:nrow(data), size = 0.7 * nrow(data))
train_data <- data[train_indices, ]
test_data <- data[-train_indices, ]
Validación Cruzada K-Fold
El dataset se divide en K partes. El modelo se entrena K−1K−1 veces y se prueba en la parte restante. Se repite el proceso para cada una de las divisiones, y al final se calcula la métrica promedio.
Ejemplo en R con caret:
```{r}
library(caret)
# Generar datos simulados
set.seed(42)
x1 <- rnorm(100)
x2 <- rnorm(100)
y <- 3 * x1 + rnorm(100, sd = 0.5)
# Crear un marco de datos
datos <- data.frame(x1 = x1 , x2 = x2, y = y)
train_control <- trainControl(method = "cv", number = 10)
model <- train(y ~ x1 + x2, data = datos, method = "lm", trControl = train_control)
print(model)
```
Leave-One-Out Cross-Validation (LOOCV)
Es un caso especial de validación cruzada donde el número de folds es igual al número de observaciones. Se usa para datasets pequeños.
Ejemplo en R:
```{r}
loocv_control <- trainControl(method = "LOOCV")
model <- train(y ~ x1 + x2, data = datos, method = "lm", trControl = loocv_control)
print(model)
```
4. Consideraciones Importantes al Evaluar Modelos de Regresión
Sobreajuste vs Subajuste: Un modelo muy complejo puede ajustarse demasiado a los datos de entrenamiento (sobreajuste), mientras que un modelo muy simple puede no capturar bien las relaciones importantes (subajuste).
Regularización: Aplicar técnicas como Ridge o Lasso para reducir la complejidad del modelo y mejorar la generalización.
Outliers: Valores atípicos pueden afectar negativamente las métricas como el MSE o RMSE.
Distribución de los Errores: Se espera que los residuos sean independientes, con media cero y varianza constante.
5. Ejemplo Completo en R: Evaluación de un Modelo de Regresión Lineal
```{r}
# Simulación de datos
set.seed(123)
x <- rnorm(100)
y <- 3 * x + rnorm(100)
# Ajustar modelo de regresión lineal
modelo <- lm(y ~ x)
# Predicciones
y_pred <- predict(modelo)
# Cálculo de métricas
mae <- mean(abs(y - y_pred))
mse <- mean((y - y_pred)^2)
rmse <- sqrt(mse)
r2 <- 1 - sum((y - y_pred)^2) / sum((y - mean(y))^2)
# Imprimir resultados
cat("MAE:", mae, "\n")
cat("MSE:", mse, "\n")
cat("RMSE:", rmse, "\n")
cat("R^2:", r2, "\n")
```
Interpretación:
El MAE indica el error promedio absoluto en las predicciones.
El MSE y RMSE penalizan más los errores grandes.
El R2R2 muestra qué proporción de la variabilidad en yy es explicada por xx.
Evaluar el desempeño de los modelos de regresión es crucial para determinar su capacidad de hacer predicciones útiles. Utilizar métricas adecuadas, como MAE, MSE, RMSE y R2R2, junto con técnicas de validación cruzada, garantiza que los modelos no solo se ajusten bien a los datos de entrenamiento, sino que también generalicen bien en datos nuevos.
## Pros y contras
Cada métrica de evaluación en modelos de regresión tiene sus ventajas y desventajas, y su idoneidad depende del contexto del problema, la naturaleza de los datos y los objetivos del análisis. A continuación, se describen los contextos en los que cada métrica es mejor o peor:
1. Error Absoluto Medio (MAE)
Ventajas:
Es fácil de interpretar, ya que mide el error promedio en las mismas unidades que la variable de respuesta.
Es robusto ante outliers, ya que trata cada error de manera lineal (sin cuadrar los errores).
Desventajas:
No penaliza más los errores grandes, por lo que puede no ser adecuado si los errores grandes son especialmente problemáticos en el contexto.
Contexto en que es mejor:
Es útil cuando se prefiere una medida que trate todos los errores por igual, como en situaciones en las que los errores pequeños y grandes son igualmente importantes.
Es apropiado para datos con ruido que no contienen outliers significativos.
Contexto en que es peor:
No es adecuado en aplicaciones donde los errores grandes deben ser penalizados más fuertemente, como en predicciones financieras o en problemas de ingeniería con altos costos asociados a grandes errores.
2. Error Cuadrático Medio (MSE)
Ventajas:
Penaliza más los errores grandes, ya que los errores se elevan al cuadrado. Esto lo hace útil para detectar errores grandes que podrían ser problemáticos.
Es diferenciable, lo cual lo convierte en una métrica favorable para la optimización en algoritmos de aprendizaje automático.
Desventajas:
Es sensible a outliers, ya que los errores grandes tienen un impacto más significativo en el resultado.
La interpretación es menos intuitiva porque está en las unidades cuadradas de la variable de respuesta.
Contexto en que es mejor:
En aplicaciones donde los errores grandes son mucho más costosos o críticos que los pequeños, como la predicción de precios de bienes de lujo o en control de calidad.
Es adecuado para tareas de optimización en algoritmos que minimizan el MSE.
Contexto en que es peor:
No es ideal cuando existen muchos outliers en los datos, ya que puede hacer que el modelo sea muy sensible a estos valores atípicos.
Si el objetivo es una interpretación sencilla de los errores en las mismas unidades de la variable de respuesta.
3. Raíz del Error Cuadrático Medio (RMSE)
Ventajas:
Tiene las mismas unidades que la variable de respuesta, lo que facilita la interpretación.
Penaliza más los errores grandes, similar al MSE.
Desventajas:
Como el MSE, es sensible a outliers, lo que puede distorsionar la métrica en presencia de valores atípicos.
Contexto en que es mejor:
Es útil cuando se necesita una métrica con las mismas unidades que la variable de respuesta, pero que también penalice errores grandes.
En situaciones donde los errores grandes son particularmente perjudiciales y deben ser evitados.
Contexto en que es peor:
No es adecuado para datos con outliers extremos, ya que puede llevar a conclusiones erróneas sobre el desempeño del modelo.
No es ideal cuando todos los errores deben ser tratados por igual, independientemente de su magnitud.
4. Coeficiente de Determinación (R2R2)
Ventajas:
Proporciona una medida de la proporción de la variabilidad explicada por el modelo, lo cual es útil para evaluar la calidad general del ajuste.
Es fácil de interpretar como un porcentaje de variabilidad explicada.
Desventajas:
No es una buena métrica para modelos no lineales, ya que puede no reflejar bien la calidad del ajuste en estos casos.
Puede ser engañoso si los datos contienen outliers o si la varianza de la variable de respuesta es baja.
Contexto en que es mejor:
En modelos de regresión lineal donde se busca evaluar qué tan bien el modelo explica la variabilidad en los datos.
Cuando se desea una métrica estandarizada para comparar la calidad del ajuste entre diferentes modelos.
Contexto en que es peor:
Para modelos no lineales, el R2R2 no siempre refleja la calidad real del ajuste.
En problemas con una variable de respuesta que tiene poca variabilidad, un alto R2R2 puede no ser muy informativo.
# Entrenamiento de modelos de aprendizaje estadístico
La lógica detrás de cualquier método de entrenamiento de modelos estadísticos se centra en ajustar un modelo a un conjunto de datos con el fin de capturar la relación entre las variables predictoras y la variable de respuesta. El objetivo principal es aprender patrones subyacentes en los datos para hacer predicciones precisas o interpretar la relación entre las variables.
## Pasos Fundamentales en el Entrenamiento de Modelos Estadísticos:
```{mermaid}
flowchart LR
A(Definir el Modelo) --> B("Especificar la\nFunción de Pérdida")
B --> C("Optimización\ndel Modelo")
C --> D("Regularización")
D --> E("Evaluación\ndel Modelo")
E --> F("¿Es el rendimiento\nsatisfactorio?")
F -->|"Sí"| G(Modelo\nFinal)
F -->|No| H("Realizar Ajustes\ne Iteración")
H --> A
```
- **Definir el Modelo**: Seleccionar el tipo de modelo estadístico (regresión lineal, regresión logística, árboles de decisión, etc.) que se ajusta a la naturaleza del problema y a la estructura de los datos. El modelo define la forma de la función que relaciona las variables predictoras X con la variable de respuesta Y.
- **Especificar una Función de Pérdida (o Costo)**: La función de pérdida mide la diferencia entre las predicciones del modelo y los valores reales de la variable de respuesta. En los modelos de regresión, un ejemplo común es el error cuadrático medio (MSE), mientras que en clasificación, la entropía cruzada o el logaritmo de la verosimilitud son más adecuados.
- **Optimización del Modelo**: El entrenamiento implica minimizar (o maximizar, dependiendo del enfoque) la función de pérdida ajustando los parámetros del modelo. Por ejemplo, en regresión lineal, se busca encontrar los coeficientes que minimicen la suma de los errores cuadráticos entre las predicciones y los valores observados. Métodos comunes para optimización incluyen el descenso de gradiente, la maximización de la verosimilitud y algoritmos especializados como el algoritmo EM.
- **Regularización (en caso necesario)**: La regularización añade un término de penalización a la función de pérdida para evitar el sobreajuste. Ayuda a mantener el modelo más simple, controlando la magnitud de los coeficientes o reduciendo el número de variables seleccionadas.
- **Evaluación del Modelo**: Una vez entrenado, el modelo se evalúa utilizando datos de prueba o técnicas de validación cruzada para estimar su rendimiento en datos no vistos. Las métricas de evaluación, como la precisión, el error absoluto medio o el índice F1, ayudan a determinar si el modelo generaliza bien.
- **Ajustes e Iteración: Basado en la evaluación del modelo, puede ser necesario ajustar hiperparámetros, cambiar la arquitectura del modelo o realizar preprocesamiento adicional en los datos. Se itera sobre el proceso hasta que se logre un rendimiento satisfactorio.
## Principios Clave:
Generalización: La capacidad del modelo para realizar predicciones precisas en nuevos datos.
Equilibrio entre sobreajuste y subajuste: El modelo debe ser lo suficientemente complejo para capturar patrones relevantes, pero no tan complejo que capture ruido específico del conjunto de entrenamiento.
Interpretabilidad vs. Complejidad: Modelos más complejos pueden proporcionar mejores predicciones, pero suelen ser más difíciles de interpretar.
En resumen, el entrenamiento de modelos estadísticos consiste en ajustar un modelo para que describa con precisión los datos observados y sea capaz de hacer predicciones precisas en nuevos datos, equilibrando la complejidad del modelo y su capacidad de generalización.
# Validación Cruzada en Regresión Lineal
La validación cruzada se utiliza para evaluar el rendimiento de un modelo de regresión lineal, ayudando a identificar el nivel de ajuste adecuado y a prevenir el sobreajuste. Las técnicas de validación cruzada más comunes son:
k-Fold Cross-Validation: Se divide el conjunto de datos en k subconjuntos (folds). En cada iteración, se entrena el modelo con k-1 subconjuntos y se prueba en el subconjunto restante. El proceso se repite k veces, promediando el error para obtener una estimación del error de generalización.
Leave-One-Out Cross-Validation (LOOCV): Cada observación se usa como conjunto de prueba, y las restantes n-1 observaciones se utilizan para entrenar el modelo. Es útil en conjuntos de datos pequeños, pero puede ser costoso computacionalmente para grandes volúmenes de datos.
Ejemplo en R:
```{r}
# Generar datos simulados
set.seed(42)
x <- rnorm(100)
y <- 3 * x + rnorm(100, sd = 0.5)
# Crear un marco de datos
datos <- data.frame(x = x, y = y)
# Configuración de validación cruzada 10-fold
control <- trainControl(method = "cv", number = 10)
# Entrenamiento del modelo con validación cruzada
modelo_cv <- train(y ~ x, data = datos, method = "lm", trControl = control)
print(modelo_cv)
```
# Técnicas de Remuestreo
El remuestreo permite evaluar la variabilidad del modelo al entrenarlo varias veces con diferentes subconjuntos del conjunto de datos original. Estas técnicas son útiles cuando el conjunto de datos es pequeño o cuando se desea evaluar la robustez del modelo.
Bootstrap: Es una técnica de remuestreo con reemplazo. Se crean múltiples subconjuntos de datos a partir del original y se entrena el modelo en cada uno de ellos. Permite estimar la incertidumbre de los coeficientes del modelo.
Ejemplo en R con Bootstrap:
```{r}
# Configuración para el bootstrap
control_boot <- trainControl(method = "boot", number = 100)
# Entrenamiento del modelo con bootstrap
modelo_boot <- train(y ~ x, data = datos, method = "lm", trControl = control_boot)
print(modelo_boot)
```
# Uso de Validación Cruzada para Evaluar Modelos
En regresión lineal, se utilizan medidas de error como el error cuadrático medio (MSE) o el error absoluto medio (MAE) para evaluar el rendimiento del modelo durante la validación cruzada. La validación cruzada permite identificar si el modelo es demasiado complejo (sobreajuste) o demasiado simple (subajuste).
Ejemplo en R calculando el MSE:
```{r}
# Calcular el MSE en el conjunto de prueba
predicciones <- predict(modelo_cv, datos)
mse <- mean((datos$y - predicciones)^2)
cat("Error cuadrático medio (MSE):", mse, "\n")
```
# Validación Cruzada y Técnicas de Remuestreo
Validación cruzada es una técnica que permite evaluar el rendimiento de un modelo al dividir los datos en varios subconjuntos (folds), entrenando el modelo en algunos y evaluándolo en otros:
- **k-Fold Cross-Validation**: Los datos se dividen en k subconjuntos, y el modelo se entrena k veces, usando k-1 conjuntos para el entrenamiento y uno para la prueba en cada iteración.
- **Leave-One-Out Cross-Validation (LOOCV)**: Cada instancia de los datos se usa como conjunto de prueba, mientras que el resto se usa para el entrenamiento.
- **Bootstrap**: Involucra el remuestreo de los datos con reemplazo para crear múltiples subconjuntos de entrenamiento.
Ejemplo en R:
```{r}
# Cargar librería caret para validación cruzada
library(caret)
# Generar datos simulados
set.seed(123)
x <- matrix(rnorm(100 * 20), 100, 20)
y <- factor(sample(c("A", "B"), 100, replace = TRUE))
datos_log <- data.frame(x, y)
# Configuración de validación cruzada 10-fold
control <- trainControl(method = "cv", number = 10)
# Entrenamiento del modelo con validación cruzada
modelo_cv <- train(y ~ ., data = datos_log, method = "glm", family = binomial, trControl = control)
print(modelo_cv)
summary(modelo_cv)
```
# Uso de Validación Cruzada para Evaluar Modelos
La validación cruzada es utilizada para obtener una estimación del error del modelo. A través de la técnica de validación cruzada se busca identificar la configuración de hiperparámetros que minimiza el error en el conjunto de prueba.
Ejemplo en R:
```{r}
# Configuración para validación cruzada con ajuste de hiperparámetros
control_tune <- trainControl(method = "repeatedcv", number = 10, repeats = 3)
# Entrenamiento con diferentes hiperparámetros para el modelo de regresión logística
grid <- expand.grid(lambda = seq(0, 1, by = 0.1), alpha = seq(0, 1, by = 0.1))
modelo_tune <- train(y ~ ., data = datos_log, method = "glmnet", trControl = control_tune, tuneGrid = grid)
print(modelo_tune)
```
# Medidas de Evaluación
Las siguientes son medidas comunes para evaluar el rendimiento de un modelo:
Matriz de Confusión: Resume el rendimiento del modelo en términos de verdaderos positivos, falsos positivos, verdaderos negativos y falsos negativos.
Precisión: Proporción de predicciones correctas sobre el total de predicciones.
Precisión=TPTP+FP
Precisión=TP+FPTP
$$
\text{Odds} = \frac{\text{Probabilidad de éxito}}{\text{Probabilidad de fracaso}} = \frac{P(E)}{1 - P(E)}
$$
Recall (Sensibilidad): Proporción de verdaderos positivos sobre el total de casos positivos.
Recall=TPTP+FN
Recall=TP+FNTP
Índice F1: Es la media armónica de la precisión y el recall.
F1=2×Precisioˊn×RecallPrecisioˊn+Recall
F1=2×Precisioˊn+RecallPrecisioˊn×Recall
Ejemplo en R:
```{r}
# Crear una matriz de confusión
pred <- predict(modelo_cv, datos_log)
confusion <- confusionMatrix(pred, datos_log$y)
print(confusion)
# Obtener precisión, recall e índice F1
precision <- confusion$byClass["Pos Pred Value"]
recall <- confusion$byClass["Sensitivity"]
f1_score <- 2 * ((precision * recall) / (precision + recall))
cat("Precisión:", precision, "\n")
cat("Recall:", recall, "\n")
cat("Índice F1:", f1_score, "\n")
```
4. Validación Cruzada y División de Conjuntos de Datos
Para evaluar correctamente un modelo, se suele dividir el conjunto de datos en:
Conjunto de entrenamiento: Usado para entrenar el modelo.
Conjunto de validación: Utilizado para la selección de hiperparámetros.
Conjunto de prueba: Usado para evaluar el rendimiento final.
Ejemplo en R:
```{r}
# División de los datos en conjunto de entrenamiento y prueba
set.seed(123)
trainIndex <- createDataPartition(datos_log$y, p = 0.8)[[1]]
x_train <- datos_log[trainIndex, ]
y_train <- datos_log$y[trainIndex]
x_test <- datos_log[-trainIndex, ]
y_test <- datos_log$y[-trainIndex]
# Entrenar un modelo en los datos de entrenamiento
modelo_final <- train(x_train, y_train, method = "glm", family = binomial)
# Evaluar en el conjunto de prueba
pred_test <- predict(modelo_final, x_test)
confusion_test <- confusionMatrix(pred_test, y_test)
print(confusion_test)
```
Esta clase abarca los conceptos de validación cruzada y técnicas de remuestreo, el uso de la validación cruzada para evaluar modelos, las medidas de evaluación (matriz de confusión, precisión, recall, índice F1) y la división de conjuntos de datos. Los ejemplos en R proporcionan un enfoque práctico para cada concepto, ayudando a comprender la importancia de una evaluación adecuada en el aprendizaje estadístico.
::: {.alert .alert-info}
## Ejercicio 1
:::
---
# Información de la sesión {.unnumbered .unlisted}
```{r session info, echo=F}
sessionInfo()
```